package com.ruoyi.cs.mapper;

import java.math.BigDecimal;
import java.util.BitSet;
import java.util.List;
import java.util.Map;

import com.ruoyi.cs.domain.TBackpack;
import com.ruoyi.cs.domain.vo.*;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.hpsf.Decimal;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.security.core.parameters.P;

/**
 * 背包信息Mapper接口
 * 
 * @author ruoyi
 * @date 2021-03-25
 */
public interface TBackpackMapper 
{
    /**
     * 查询背包信息
     * 
     * @param bbId 背包信息ID
     * @return 背包信息
     */
    public TBackpack selectTBackpackById(String bbId);


    public TBackPackVo selectTBackpackByIdVo(String bbId);

    /**
     * 查询背包信息列表
     * 
     * @param tBackpack 背包信息
     * @return 背包信息集合
     */
    public List<TBackpack> selectTBackpackList(TBackpack tBackpack);

    /**
     * 新增背包信息
     * 
     * @param tBackpack 背包信息
     * @return 结果
     */
    public int insertTBackpack(TBackpack tBackpack);

    /**
     * 修改背包信息
     * 
     * @param tBackpack 背包信息
     * @return 结果
     */
    public int updateTBackpack(TBackpack tBackpack);

    public int updateTBackpackerror(TBackpack tBackpack);

    public int updateTBackpackVo(TBackPackVo tBackpack);
    /**
     * 删除背包信息
     * 
     * @param bbId 背包信息ID
     * @return 结果
     */
    public int deleteTBackpackById(String bbId);

    /**
     * 批量删除背包信息
     * 
     * @param bbIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteTBackpackByIds(String[] bbIds);

    /**
     * 轮播列表
     */
    public List<GoodsBelongingVo> carouselList(String beginCreateTime);

    public List<GoodsBelongingVo> top3CarouselList(@Param("beginCreateTime")String beginCreateTime);

    /**
     * 批量插入指定字段的背包信息
     * @param list
     * @return
     */
    public int insertTBackpackBatch(@Param("list") List<TBackpack> list);

    /**
     * 批量修改背包启用、停用、删除状态
     * @param delFlag
     * @param bbIds
     * @return
     */
    public int updateTBackpackDelFlagBatch(@Param("delFlag") String delFlag,@Param("bbIds") String[] bbIds);

    /**
     * 修改背包状态
     * @param tBackpack
     * @return
     */
    public int updateTBackpackStatusBatch(TBackpack tBackpack);

    public int updateTBackpackStatusBatchVo(@Param("list") List<TBackPackVo> list);

    public int updateTBackpackStatusBatchErrorVo(List<TBackPackVo> tBackpacks);

    public int updateTBackpackStatusVo(TBackPackVo tBackpack);

    /**
     * 根据ID获取背包列表
     * @param bbIds
     * @param userId
     * @return
     */
    public List<TBackpack> selectTBackpackBatchByIds(@Param("bbIds") String[] bbIds,@Param("userId") String userId);

    public List<TBackPackVo> selectTBackpackBatchByIdsVo(@Param("bbIds") String[] bbIds,@Param("userId") String userId);



    /**
     * 统计当天开启盲盒的个数
     * @param userId
     * @param time
     * @return
     */
    public int statisticsDayNum(@Param("userId") String userId,@Param("time") String time);

    /**
     * 获取我的背包信息
     * @param tBackpack
     * @return
     */
    public List<TBackpack> getMyTBackpack(TBackPackVo tBackpack);

    /**
     * 100条游戏记录
     * @param tBackpack
     * @return
     */
    public List<TBackpack> gameRecord(TBackPackVo tBackpack);


    /**
     * 后台用户背包信息
     * @param tBackPackVo
     * @return
     */
    public List<TBackPackVo> tBackpackListBack(TBackPackVo tBackPackVo);

    /**
     * 统计用户背包价值
     * @param userIds
     * @return
     */
    public List<Map<String, String>> countTBackpackValue(@Param("list") List<String> userIds);

    /**
     * 今日开箱统计
     * @param time
     * @return
     */
    public Map<String, String> unpackingCountToday(String time);

    /**
     * 总开箱统计
     * @param
     * @return
     */
    public Map<String, String> unpackingCountTotal();

    /**
     * 取回详情
     * @param userId
     * @return
     */
    public List<TBackpack> retrieveList(@Param("userId") String userId,@Param("goodsName") String goodsName);

    /**
     * 今日取回价值统计
     * @return
     */
    public Map<String, BigDecimal> retrieveCountTodayByCondition(TRechargeVo tRechargeVo);

    public Map<String, BigDecimal> retrieveCountTotal();

    /**历史背包饰品总价值*/
    public BigDecimal historyGoodsPriceTotal(TRechargeVo tRechargeVo);

    public BigDecimal userBalanceTotal(TRechargeVo tRechargeVo);

    /*总取回价值*/
    public Map<String, BigDecimal> retrieveCountTotalByCondition(@Param("userPhone") String userPhone,
                                                                 @Param("userName") String userName,
                                                                 @Param("startTime") String startTime,
                                                                 @Param("endTime") String endTime);

    public Map<String, BigDecimal> boxCountTotal(@Param("startTime") String startTime, @Param("endTime") String endTime,@Param("boxType") String boxType);

    public Map<String, BigDecimal> boxCountToday(String boxType);

    public Map<String, BigDecimal> battleBoxCountTotal(@Param("startTime") String startTime, @Param("endTime") String endTime);

    public Map<String, BigDecimal> battleBoxCountToday();

    /**饰品开出个数、取回个数统计*/
    public Map<String,Object> goodsOutNumCount(String goodsId);

    public Map<String, BigDecimal> luckyCountTotal(@Param("startTime") String startTime, @Param("endTime") String endTime);

    public Map<String, BigDecimal> luckyCountToday();

    public Map<String,String> rollRetrieveCountTotal();

    public List<TBackpack> getExpriceList();

    public List<TBackpack> getExpriceListMax();

    public List<TBackPackVo> getDealFailedList();

    /**总开箱次数*/
    public Long openBoxTotal();


    public int updateTBackpackFailNum(String bbId);

    public Map<String, Object> shoppingMallTotal();

    public Map<String, Object> shoppingMallToday();

    public List<TBackPackShoppingBackVo> shoppingMallBuyList(TBackPackShoppingBackVo tBackPackShoppingBackVo);

    public BigDecimal countOpenBox(String userId);

    public BigDecimal countGoodsUpgrate(String userId);

    public List<TBackPackVo> selectBackpackListBattle(@Param("goodsBelongingId") String goodsBelongingId);

    /**
     * 计算用户总资产
     *
     * @param userId
     * @return
     */
    public BigDecimal selectUserTotalAssets(String userId);

    /**
     * 查询背包表开箱前40条数据
     * @param goodsBelongingId
     * @return
     */
    public List<TBackpackOpenBoxTopFortyVo> backPackopenBoxTopForty(String goodsBelongingId);

    /**
     * 查询购买额度
     *
     * @param userId
     * @return
     */
    public BigDecimal selectUrchaseQuota(String userId);

    /**
     *
     * @param userId
     * @return
     */
    public Long selectRetrievalTimes(String userId);

    /**
     * 主播禁止取回时取回背包数据处理
     * @return
     */
    public List<TBackpack> anchorRetrievalDispose();


    public int updateAnchorRetrieval(@Param("list") List<TBackpack> list);

    /**
     * 统计主播背包中待处理的总饰品价值
     * @param userId
     * @return
     */
    public BigDecimal countPendingPrice(String userId);

    /**
     * 获取已完成交易的ZBT订单ID
     * @return
     */
    public List<String> tradedBackList();

    /**
     * 根据订单来更新ZBT真实交易价格
     * @param orderId
     * @param zbtTradePrice
     * @return
     */
    public int updateZBTTradePrice(@Param("orderId") String orderId,@Param("zbtTradePrice") BigDecimal zbtTradePrice);

    public long countErveryNum(@Param("goodsBelongingType") String goodsBelongingType,@Param("goodsBelongingId") String goodsBelongingId);

    /**
     * @Desc: 获取用户背包信息上月22号-本月21号
     * @author: zz
     * @date: 2023/12/15
     */
    public List<TBackpack> getUserFlows(String userId);

    /**
     * @Desc:  统计时间段内的总亏损
     * @author: zz
     * @date: 2023/12/16
     */
    public BigDecimal countRangerUserKsFee(@Param("userId") String userId,@Param("startTime") String startTime,@Param("endTime") String endTime);

    public int batchUpdateBBStatus(@Param("bbIds") List<String> bbIds,@Param("bbStatus") String bbStatus);

    /**
     * @Desc: 创建购买订单后批量更新背包
     * @author: zz
     * @date: 2024/2/27
     */
    public int updateBatchTBackpackStatusV2(List<TBackPackVo> tBackpack);

    /**
     * @Desc: 统计用户已取回背包价值
     * @author: zz
     * @date: 2024/2/23
     */
    public List<Map> retrievedPriceGroupByUserId(@Param("userIds") List<String> userIds);
}
